12. Relating a model to another model more than once
In this example, a Person can have a mother and father -- both of which are other Person objects.
Set related_name to designate what the reverse relationship is called.
Model source code
from django.core import meta
class Person(meta.Model):
full_name = meta.CharField(maxlength=20)
mother = meta.ForeignKey('self', null=True, related_name='mothers_child')
father = meta.ForeignKey('self', null=True, related_name='fathers_child')
def __repr__(self):
return self.full_name
API reference
Person objects have the following methods:
- add_fathers_child()
- add_mothers_child()
- delete()
- get_father()
- get_fathers_child()
- get_fathers_child_count()
- get_fathers_child_list()
- get_mother()
- get_mothers_child()
- get_mothers_child_count()
- get_mothers_child_list()
- save()
Sample API usage
This sample code assumes the above model has been saved in a file examplemodel.py.
>>> from django.models.examplemodel import persons # Create two Person objects -- the mom and dad in our family. >>> dad = persons.Person(full_name='John Smith Senior', mother=None, father=None) >>> dad.save() >>> mom = persons.Person(full_name='Jane Smith', mother=None, father=None) >>> mom.save() # Give mom and dad a kid. >>> kid = persons.Person(full_name='John Smith Junior', mother=mom, father=dad) >>> kid.save() >>> kid.get_mother() Jane Smith >>> kid.get_father() John Smith Senior >>> dad.get_fathers_child_list() [John Smith Junior] >>> mom.get_mothers_child_list() [John Smith Junior] >>> kid.get_mothers_child_list() [] >>> kid.get_fathers_child_list() []
Comments
Post a comment
Note: Please only use the comments for questions/critcisms/suggestions on the docs; if you experience errors please file a ticket, ask in the IRC channel, or post to the django-users list. Comments will be periodically reviewed, integrated into the documentation proper, and removed.
